
package iks.render.anim 
{
	import flash.display.*;
	import flash.geom.*;
	import iks.iface.*;
	
	/**
	 * 帧信息数据类, 保存纹理以及对应的原始数据.
	 * @author Yao Zhenyu
	 */
	public class KFrameInfo implements IKDispose
	{
		/**
		 * 构造帧信息对象.
		 * @param	texture 纹理贴图数据
		 * @param	frameRect 在组合位图中的矩形区域, 以组合位图的左上角为基准点, x轴自左向右, y轴自上向下.
		 * @param	rotated 位图是否旋转, 旋转的大小只在, 旋转只旋转 90°
		 * @param	sourceRect 在原始位图中截取矩形的区域, 以原始位图的右上角为基准点, x轴自左向右, y轴自上向下.
		 * @param	sourceSize 原始位图矩形大小
		 */
		public function KFrameInfo(texture : KTexture2D, 
									frameRect : Rectangle, 
									rotated : Boolean, 
									sourceRect : Rectangle,
									sourceSize : Point) 
		{
			m_texture = texture;
			m_frameRect = frameRect.clone();
			m_rotated = rotated;
			m_sourceRect = sourceRect.clone();
			m_sourceSize = sourceSize.clone();
		}
		
///////////////////////////////////////////////////////////////////////////////////////////////////
// 公共域
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		/// 获得数据帧位图数据
		public function get texture() : KTexture2D
		{
			return m_texture;
		}
		
		/**
		 * 获得实际位图对于原始位图的偏移量, 计算方式: 原始位图的中心点 - (裁剪区域在原始位图中的坐标 + 裁剪区域的中心点).
		 */ 
		public function get offset() : Point
		{
			var offset : Point = new Point();
			offset.x = m_sourceSize.x / 2.0 - (m_sourceRect.x + m_sourceRect.width / 2.0);
			offset.y = m_sourceSize.y / 2.0 - (m_sourceRect.y + m_sourceRect.height / 2.0);
			return offset;
		}
		
		/**
		 * 获得原始位图的大小;
		 */
		public function get sourceSize() : Point
		{
			return m_sourceSize;
		}
		
		/**
		 * 在原始位图中截取的矩形区域
		 */
		public function get sourceRect() : Rectangle
		{
			return m_sourceRect;
		}
		
///////////////////////////////////////////////////////////////////////////////////////////////////
// 重写方法
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		/// 释放资源
		public function dispose() : void
		{
			if (m_isDisposed)
				return;
			m_isDisposed = true;
			
			m_texture = null;
			m_frameRect = null;
			m_sourceSize = null;
			m_sourceRect = null;
		}

///////////////////////////////////////////////////////////////////////////////////////////////////
// 私有域
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		private var m_isDisposed : Boolean = false;

		/// 渲染的位图数据
		private var m_texture : KTexture2D = null;
		
		/// 在组合位图中的矩形区域
		private var m_frameRect : Rectangle = null;
		
		/// 原始位图的大小
		private var m_sourceSize : Point = null;
		
		/// 在原始位图中截取矩形的区域
		private var m_sourceRect : Rectangle = null;
		
		/// 是否旋转
		private var m_rotated : Boolean = false;
	}

}